#include "Core\Oatmeal.h"			// standard library include (must be first include)
#include "Core\Internals.h"			// standard include for intenral definitions
#include "Core\Error.h"				// error handling routines

////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////// THREAD POOL ROUTINES ///////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////
/// DO NOT CALL THESE ROUTINES DIRECTLY! ONLY THE INTERFACE SHOULD CALL THEM ONCE AND ONLY ONCE! ///
////////////////////////////////////////////////////////////////////////////////////////////////////

// private members
static uint8 m_nMaxThreads = 1;		// max threads in pool (with least one for the renderer)
static bool m_bInitialized = false;	// to make sure we don't accidently create two pools

// don't forget affinity

////////////////////////////////////////////////////////////////////////////////////////////////////

bool
InitThreadPool (void)
{
	bool bReturn = false;

	// only do this once
	if(!m_bInitialized)
	{
		// the number of threads in the pool is number of CPUs x 2 and one extra for the renderer
		m_nMaxThreads = (oatGetCPUCount() * 2) + 1;

		bReturn = m_bInitialized = true;
	}

	return bReturn;
}

////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////